﻿using System.Configuration;
using System.Data;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows;
using AutoMapper;
using Microsoft.Data.Sqlite;
using Protocal.App.Common;
using 多协议通信平台.Common;
using 多协议通信平台.Entity;
using 多协议通信平台.Models;
using 多协议通信平台.UProfile;
using 多协议通信平台.Views;

namespace 多协议通信平台
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            InitDb();
            InitModelMapper();
            Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
            bool? flag = new LoginView().ShowDialog();
            if (flag == true)
            {
                new MainView().Show();
                Current.ShutdownMode = ShutdownMode.OnLastWindowClose;
            } 
        }


        private void InitDb()
        {
            // 获取数据库路径
            string? sqliteDbConn = AppSetting.Get<string>("SqliteDb");

            // 从连接字符串中提取文件路径（通常格式为 "Data Source=xxx.db"）
            string? dbFilePath = null;
            if (!string.IsNullOrWhiteSpace(sqliteDbConn))
            {
                var match = Regex.Match(sqliteDbConn, @"Data Source\s*=\s*(.+?.db)", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    dbFilePath = match.Groups[1].Value.Trim();
                }
            }

            // 检查并创建数据库文件
            if (!string.IsNullOrWhiteSpace(dbFilePath) && !File.Exists(dbFilePath))
            {
                // 使用 SQLite 创建空数据库文件（通过连接即可创建）
                using (var connection = new SqliteConnection(sqliteDbConn))
                {
                    connection.Open();
                    // 可以执行一条初始化命令，比如建个表
                    List<string> tables = AppSetting.Get<List<string>>("TableSql");
                    using (var cmd = connection.CreateCommand())
                    {
                        foreach (var table in tables)
                        {
                            cmd.CommandText = table;
                            cmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }

        private void InitModelMapper()
        {
            MapperHelper.Initialize(profiles: new ModbusPoint_Profile());
        }
    }

}
